MOOC Utils

Utils like auto assignment solver extension and course notice announcment notification for MOOC courses

What is MOOC utils

MOOC Utils is a set of tools for NPTEL and SWAYAM learners who are tired of repetitive busywork. Three parts: an AI assignment helper extension, a notices CLI/API, and a Next.js marketing site plus dashboard.

Repo: tashifkhan/MOOC-utils

Project structure#

Three packages, each with its own stack:

  • assignment-solver/: Chrome/Firefox extension (Vite, Gemini).
  • notice-reminders/: Python 3.12+ CLI and FastAPI backend.
  • website/: Next.js App Router landing page and dashboard.

Core components#

  • Assignment Solver

    • Purpose: extract and solve assignment questions on MOOC pages.
    • Modes: Study Hints and Auto-Solve.
    • Types: single choice, multi choice, fill-in-the-blank, plus screenshots for image questions.
    • Privacy: BYOK. Client-side only. Key stored in the browser.
    • Browsers: Chrome 116+, Firefox 121+.
  • Notice Reminders

    • Purpose: course updates without hunting the Swayam UI.
    • CLI: search and list announcements, no database.
    • API: users, search, courses, announcements, subscriptions, notifications.
    • Auth: email OTP, JWT access/refresh cookies.
    • Notify: Telegram and email still planned.
  • Website

    • Purpose: marketing plus the Notice Reminders dashboard, and an Assignment Solver page.
    • Auth: OTP against the Notice Reminders API.
    • Also: public course search, subscription manager, inbox, profile.

Architecture overview#

The extension talks to Gemini. The website talks to Notice Reminders. Those two paths do not share a server.

Assignment solver#

Layered background, content script, side panel, and Gemini service.

Extraction turns page HTML into JSON. Solving asks Gemini per question. Application clicks radios, checks boxes, or types fill-ins.

Notice reminders#

uv run python main.py cli or uv run python main.py api. CLI uses app/cli. API uses Tortoise against SQLite.

Public: GET /search, GET /courses, GET /courses/{code}. Everything else needs auth. CORS defaults to http://localhost:3000.

Website#

OTP login, course search, subscriptions, inbox. TanStack Query for dashboard fetches.

lib/auth-context.tsx owns request/verify OTP, refresh, and logout. Do not use npm run dev or bun dev.

Dependency analysis#

Performance#

  • Assignment Solver: delays between Gemini calls and DOM writes so quota and the page keep up.
  • Notice Reminders: cache TTL 60 minutes; SQLite is the local default.
  • Website: Query cache and App Router splits.

Troubleshooting#

  • Assignment Solver: page HTML, missing containers, invalid key, custom widgets, rate limits.
  • Notice Reminders: CLI vs API, CORS origin, jwt_secret.
  • Website: API down, cookies blocked, wrong NEXT_PUBLIC_API_URL.

Conclusion#

Less manual checking, fewer missed notices, assignment help that does not ship your key to a random server.

Appendices#

  • Assignment Solver: cd assignment-solver && bun install && bun run build, load dist/chrome or dist/firefox.
  • Notice Reminders: cd notice-reminders && uv sync, then cli or api.
  • Website: cd website && bun install, set NEXT_PUBLIC_API_URL, bun run build.